package com.springboot.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.springboot.common.Result;
import com.springboot.entity.Carousel;
import com.springboot.mapper.CarouselMapper;
import com.springboot.service.ICarouselService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.springboot.utils.IntegerUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * 轮播图表 服务实现类
 *
 * @author zjb
 * @since 2025-10-24
 */
@Service
public class CarouselServiceImpl extends ServiceImpl<CarouselMapper, Carousel> implements ICarouselService {

    /**
     * 添加轮播图
     *
     * @param carousel 轮播图信息
     * @return 添加结果
     */
    @Override
    public Result addCarousel(Carousel carousel) {
        if (!StringUtils.hasText(carousel.getImageUrl())) {
            return Result.error("图片路径不能为空");
        }
        if (IntegerUtils.isEmptyOrZero(carousel.getTargetType())) {
            return Result.error("跳转类型不能为空或非法值");
        }
        if (!StringUtils.hasText(carousel.getTargetId())) {
            return Result.error("跳转目标不能为空");
        }
        if (hasThisCarousel(carousel)){
            return Result.error("已有相同轮播图，请勿重复添加");
        }
        if (carousel.getSort() == null) {
            carousel.setSort(0);
        }
        if (carousel.getStatus() == null) {
            carousel.setStatus(1);
        }
        if (save(carousel)) {
            return Result.success("添加成功");
        } else {
            return Result.error("添加失败");
        }
    }

    /**
     * 检查是否存在相同的轮播图
     *
     * @param carousel 轮播图信息
     * @return 是否存在相同轮播图
     */
    private boolean hasThisCarousel(Carousel carousel) {
        LambdaQueryWrapper<Carousel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Carousel::getImageUrl, carousel.getImageUrl())
                .eq(Carousel::getTargetType, carousel.getTargetType())
                .eq(Carousel::getTargetId, carousel.getTargetId());
        if (getOne(lambdaQueryWrapper) != null) {
            return true;
        }
        return false;
    }

    /**
     * 删除轮播图
     *
     * @param carouselId 轮播图ID
     * @return 删除结果
     */
    @Override
    public Result removeCarousel(Integer carouselId) {
        if (IntegerUtils.isEmptyOrZero(carouselId)) {
            return Result.error("轮播图ID不能为空或非法值");
        }
        if (removeById(carouselId)) {
            return Result.success("删除成功");
        } else {
            return Result.error("删除失败");
        }
    }

    /**
     * 更新轮播图
     *
     * @param carouselId 轮播图ID
     * @param carousel   轮播图信息
     * @return 更新结果
     */
    @Override
    public Result updateCarousel(Integer carouselId,Carousel carousel) {
        if (IntegerUtils.isEmptyOrZero(carouselId)) {
            return Result.error("轮播图ID不能为空或非法值");
        }
        carousel.setCarouselId(carouselId);
        // 检查轮播图是否存在
        Carousel existingCarousel = getById(carouselId);
        if (existingCarousel == null) {
            return Result.error("轮播图不存在");
        }
        if (hasThisCarousel(carousel)){
            return Result.error("已有相同轮播图，请勿重复添加");
        }
        if (updateById(carousel)) {
            return Result.success("更新成功");
        } else {
            return Result.error("更新失败");
        }
    }

    /**
     * 获取轮播图列表（分页）
     *
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @return 轮播图分页数据
     */
    @Override
    public Result getCarousel(Integer pageNum,Integer pageSize) {
        LambdaQueryWrapper<Carousel> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByAsc(Carousel::getSort);
        IPage<Carousel> page=new Page<>(pageNum,pageSize);
        IPage<Carousel> carouselIPage=page(page,queryWrapper);
        return Result.success(carouselIPage, "获取成功");
    }
}